# 博客代码：https://www.bilibili.com/video/BV1Z4411o7TA?p=10&spm_id_from=pageDriver

from selenium import webdriver

# 1. 创建 WebDriver 对象，指明使用chrome浏览器驱动
wd = webdriver.Chrome(r'D:\soft\google\chromedriver.exe')

# 2. 防止页面加载过慢，请求是时候，如果找不到元素，
# 则每个半秒钟去界面上查看一次，直到找到该元素或超过10秒
wd.implicitly_wait(10)

wd.get('https://www.baidu.com')
element = wd.find_element_by_id('kw').send_keys("中国你好")
element = wd.find_element_by_id("su")
element.click();

# 选择器用法1: 选择多个，用逗号; 比如既满足result1又满足result2
# 逗号是分隔成两部分计算，然后合并
messageEle = wd.find_element_by_css_selector(".result1,.result2")


# 选择器用法2：
# 正数->按照次序来选择节点，指定选择的元素 是父元素的第几个子节点，使用 nth-child
# 例如：可以这样写 span:nth-child(2) ，
# 就是选择所有位置为第2个的所有元素，不管是什么类型
# 相对于父元素来说，第二个子节点是span的符合条件的元素
messageEle = wd.find_element_by_css_selector("span:nth-child(2)")#span是父元素第二个节点的元素

# 如果你不加节点类型限制，直接这样写 :nth-child(2)
# 就是选择所有位置为第2个的所有元素，不管是什么类型
messageEle = wd.find_element_by_css_selector(":nth-child(2)")#每个节点只要是相对于父元素第二个节点的元素都符合


# 选择器用法3：
# 倒数-> 也可以反过来， 选择的是父元素的 倒数第几个子节点 ，使用 nth-last-child
messageEle = wd.find_element_by_css_selector("p:nth-last-child(1)") #相对于父节点的倒数第二个节点


# 选择器用法4：
# 父元素的第几个某类型的子节点
# 我们可以指定选择的元素 是父元素的第几个 某类型的 子节点
# 使用 nth-of-type
# 比如，
# 我们要选择 唐诗 和宋词 的第一个 作者，
# 可以像上面那样思考：选择的是 第2个子元素，并且是span类型
# 所以这样可以这样写 span:nth-child(2) ，
# 还可以这样思考，选择的是 第1个span类型 的子元素
# 所以也可以这样写 span:nth-of-type(1)


# 父元素的倒数第几个某类型的子节点
# 当然也可以反过来， 选择父元素的 倒数第几个某类型 的子节点
# 使用 nth-last-of-type
# 像这样
# p:nth-last-of-type(2)


#选择器用法5：奇数odd节点和偶数even节点

# 如果要选择的是父元素的 偶数节点，使用 nth-child(even)
# 比如 ： p:nth-child(even)
# 如果要选择的是父元素的 奇数节点，使用 nth-child(odd)
# 比如 ：p:nth-child(odd)



# 如果要选择的是父元素的 某类型偶数节点，使用 nth-of-type(even)
# 如果要选择的是父元素的 某类型奇数节点，使用 nth-of-type(odd)
# nth-of-type选择是所有符合类型条件的奇数偶数

# 选择器用法6：兄弟节点选择
# 上面的例子里面，我们要选择 唐诗 和宋词 的第一个 作者
# 还有一种思考方法，就是选择 h3 后面紧跟着的兄弟节点 span。
# 这就是一种 相邻兄弟 关系，可以这样写 h3 + span
# 表示元素 紧跟关系的 是 加号
# 返回符合条件的span

# 后续所有兄弟节点选择
# 如果要选择是 选择 h3 后面所有的兄弟节点 span，可以这样写 h3 ~ span



messageHtml = messageEle.get_attribute("outerHTML")
print(messageHtml)
wd.quit();